package vip.zhenzicheng.algorithm.leetcode.str;

/**
 * <a href="https://leetcode.cn/problems/compare-version-numbers/">比较版本号 [中等]</a>
 *
 * @author zhenzicheng
 * @date 2022-08-01 16:03
 */
public class CompareVersionNumbers_165 {

  /**
   * 原生JDK API
   */
  // public int compareVersion(String version1, String version2) {
  //   String[] levels_1 = version1.split("\\.");
  //   String[] levels_2 = version2.split("\\.");
  //
  //   int len = Math.max(levels_1.length, levels_2.length);
  //   for (int i = 0; i < len; i++) {
  //     Integer v1 = i < levels_1.length ? Integer.parseInt(levels_1[i]) : 0;
  //     Integer v2 = i < levels_2.length ? Integer.parseInt(levels_2[i]) : 0;
  //     // 装箱值能够比较，x < y 则为-1，否则是1 相等时为0
  //     int compare = v1.compareTo(v2);
  //     if (compare != 0) {
  //       return compare;
  //     }
  //   }
  //   return 0;
  // }

  public int compareVersion(String version1, String version2) {
    int i = 0, j = 0;
    int n = version1.length(), m = version2.length();

    while (i < n || j < m) {
      int num1 = 0, num2 = 0;
      // 直到遇见小数点未知，计算这个数字的大小
      while (i < n && version1.charAt(i) != '.') {
        // 如果有前导0，结果还是0，不需要做单独判断
        num1 = num1 * 10 + version1.charAt(i++) - '0';
      }
      while (j < m && version2.charAt(j) != '.') {
        num2 = num2 * 10 + version2.charAt(j++) - '0';
      }

      if (num1 < num2) {
        return -1;
      } else if (num1 > num2) {
        return 1;
      }
      i++;
      j++;
    }
    // 最后都相等才返回相等
    return 0;
  }
}
